/*
 * Copyright 2020 eBlocker Open Source UG (haftungsbeschraenkt)
 *
 * Licensed under the EUPL, Version 1.2 or - as soon they will be
 * approved by the European Commission - subsequent versions of the EUPL
 * (the "License"); You may not use this work except in compliance with
 * the License. You may obtain a copy of the License at:
 *
 *   https://joinup.ec.europa.eu/page/eupl-text-11-12
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
export default {
    templateUrl: 'app/components/messages/messages.component.html',
    controller: MessagesController,
    controllerAs: 'ctrl'
};

function MessagesController(logger, $mdDialog, NotificationService, MessageService, ControlbarService) {
    'ngInject';
    'use strict';

    const vm = this;

    vm.handleClick = handleClick;
    vm.getMessages = getMessages;
    vm.getNumberOfMessages = getNumberOfMessages;
    vm.hasAlertMessage = hasAlertMessage;

    function handleClick() {
        showMessageCenterDialog();
    }

    function getNumberOfMessages() {
        if (angular.isArray(vm.messages) && vm.messages.length > 0) {
            return vm.messages.length;
        }
        return -1;
    }

    function hasAlertMessage() {
        return MessageService.hasAlertMessage();
    }

    function getMessages() {
        return MessageService.getMessages().then(function success(response) {
            vm.messages = MessageService.sortMessagesByDate(response);
            if (hasAlertMessage()) {
                vm.messages = MessageService.sortMessagesBySeverity(vm.messages);
                if (ControlbarService.showAlertMessagesNotification()) {
                    NotificationService.warning('CONTROLBAR.MENU.MESSAGES.NOTIFICATION.HAS_ALERT');
                    ControlbarService.showAlertMessagesNotification(false);
                }
            }
            vm.messages.reverse();
        });
    }

    function showMessageCenterDialog() {
        $mdDialog.show({
            controller: 'MessageDialogController',
            controllerAs: 'ctrl',
            templateUrl: 'app/dialogs/messages/message.dialog.html',
            parent: angular.element(document.body),
            locals: {
                messages: vm.messages
            },
            clickOutsideToClose: false
        }).then(function () {
        }, function () {
        });
    }

    getMessages();
}
